var strategies = {
    require: function (value, errMsg) {
        if (value == "") {
            return errMsg
        }
    },
    min: function (value, length, errMsg) {
        if (value.length < length) {
            return errMsg
        }
    },
    max: function (value, length, errMsg) {
        if (value.length > length) {
            return errMsg
        }
    },
    gt: function (value, errMsg) {
        if (value[0] <= value[1]) {
            return errMsg
        }
    },
    lt: function (value, errMsg) {
        if (value[0] >= value[1]) {
            return errMsg
        }
    },
    eq: function (value, errMsg) {
        if (value[0] !== value[1]) {
            return errMsg
        }
    },
    isNumber: function (value, errMsg) {
        if (!/^[0-9]{0,}$/.test(value)) {
            return errMsg
        }
    },
    isMobile: function (value, errMsg) {
        if (!/^1[3|5|8][0-9]{9}$/.test(value)) {
            return errMsg
        }
    },
    isPassword: function (value, errMsg) {
        if (!/^[0-9a-zA-Z]{0,}$/.test(value)) {
            return errMsg
        }
    },
    isChinese: function (value, errMsg) {
        if (!/^[\u4e00-\u9fa5]{0,}$/.test(value)) {
            return errMsg
        }
    },
    isIdCard: function (value, errMsg) {
        if (
            !/^[1-9]\d{5}(18|19|([23]\d))\d{2}((0[1-9])|(10|11|12))(([0-2][1-9])|10|20|30|31)\d{3}[0-9Xx]$/.test(
                value
            )
        ) {
            return errMsg
        }
    },
    isEmail: function (value, errMsg) {
        if (
            !/^([A-Za-z0-9_\-\.])+\@([A-Za-z0-9_\-\.])+\.([A-Za-z]{2,4})$/.test(
                value
            )
        ) {
            return errMsg
        }
    },
    isPrice: function (value, errMsg) {
        if (!/^(\d+)(((.\d{1,2}){1})|(\d{0,2}?))$/.test(value)) {
            return errMsg
        }
    },
}

var Validator = function () {
    this.cache = []
}

Validator.prototype.add = function (dom, rule, errMsg) {
    this.cache.push(function () {
        var strategyArr = rule //strategyArr 为stratery集合
        for (var i = 0, arg; (arg = strategyArr[i++]); ) {
            var arr = arg.split(":")
            var strategy = arr.shift()
            arr.unshift(dom)
            arr.push(errMsg) //[value,errMsg] or [value,num,errMsg]
            if (strategies[strategy].apply(dom, arr)) {
                //如果有确切的值说明验证失败
                return errMsg
            }
        }
        return
    })
}

Validator.prototype.check = function () {
    for (var i = 0, ValidatorFunc; (ValidatorFunc = this.cache[i++]); ) {
        var msg = ValidatorFunc() //开始验证
        if (msg) {
            //如果有确切的返回值，贼说明验证不通过
            return msg
        }
    }
}
export default Validator
